package tests;

import static org.junit.Assert.*;

import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;

import contracts.ContractException;

import services.BlocService;
import utils.Tresor;
import utils.Type;

public abstract class AbstractBlocTest {
	private BlocService bloc;

	protected AbstractBlocTest(){
		this.bloc = null;
	}

	protected final BlocService getBlocService(){
		return bloc;
	}

	protected final void setBlocService(BlocService bloc){
		this.bloc= bloc;
	}

	@Before
	public abstract void beforeTests();

	public final void afterTests(){
		this.bloc = null;
	}

	public void testInit2(){

	}






	/**
	 * cas de test 1.1 getType(init(type,tresor))=type
	 * 		conditions initiales : vide
	 * 		operation : init(type,tresor) ;
	 * 		oracle : pas d'exception
	 */
	@Test
	public void testInit1(){
		try{
			this.bloc.init(Type.MURBRIQUE, Tresor.RIEN);
			assertTrue(this.bloc.getType().equals(Type.MURBRIQUE));
		}catch( ContractException ce){
			Assert.fail("ContractException not expected");
		}
	}

	/**
	 * cas de test 1.2 getType(init(type,tresor))!= type
	 *	conditions initiales : vide
	 *	opération : init(type,tresor) ;
	 *	oracle : exception levée		
	 * NON VERIFIABLE
	 */

	/**
	 * 	cas de test 1.3 getTresor(init(type,tresor)) = tresor
	 *		conditions initiales : vide
	 *		opération : init(type,tresor) ;
	 *oracle : pas d'exception
	 */

	public void testInit3(){
		try{
			this.bloc.init(Type.MURBRIQUE, Tresor.RIEN);
			assertTrue(this.bloc.getTresor().equals(Tresor.RIEN));
		}catch( ContractException ce){
			Assert.fail("ContractException not expected");
		}
	}

	/**
	 * 	cas de test 1.4 getTresor(init(type,tresor)) != tresor
	 *	conditions initiales : vide
	 *	opération : init(type,tresor) ;
	 *	oracle : exception levée
	 *	NON VERIFIABLE
	 */

}
